﻿//using Microsoft.EntityFrameworkCore;
//using Microsoft.EntityFrameworkCore.Metadata.Builders;
//using System;
//using Volo.Abp.Auditing;

//namespace Extentions
//{
//    /// <summary>
//    /// mapping扩展
//    /// </summary>
//    public static class MappingExtentions
//    {
//        /// <summary>
//        /// 审计字段扩展
//        /// </summary>
//        /// <typeparam name="T"></typeparam>
//        /// <typeparam name="TKey"></typeparam>
//        /// <typeparam name="TUser"></typeparam>
//        /// <param name="builder"></param>
//        /// <param name="columnPrefix"></param>
//        public static void AuditMapping<T, TKey>(this EntityTypeBuilder<T> builder, string columnPrefix) where T : EduBaseAggregates<TKey>
//        {
//            //主键标识
//            builder.HasKey(c => c.Id);
//            builder.Property(c => c.Id).HasColumnName($"{columnPrefix}Id").HasColumnType(typeof(TKey).Name.ToLowerInvariant() == "int64" ? "bigint" : "varchar(36)").ValueGeneratedNever();

//            #region 审计
//            //创建日期
//            builder.Property<DateTime>(nameof(EduBaseAggregates<TKey>.CreationTime))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.CreationTime))
//                .HasColumnType("datetime")
//                .HasComment("创建日期");

//            //修改日期
//            builder.Property<DateTime?>(nameof(EduBaseAggregates<TKey>.LastModificationTime))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.LastModificationTime))
//                .HasColumnType("datetime")
//                .HasComment("修改日期");

//            //创建人
//            builder.Property(nameof(EduBaseAggregates<TKey>.CreatorId))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.CreatorId))
//                .HasColumnType("varchar(36)")
//                .HasComment("创建人标识");

//            //修改人
//            builder.Property(nameof(EduBaseAggregates<TKey>.LastModifierId))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.LastModifierId))
//                .HasColumnType("varchar(36)")
//                .HasComment("修改人标识");
//            #endregion

//            builder.Property(x => x.Timestamp).HasColumnName("ConcurrencyStamp").IsRowVersion().HasComment("并发标识");

//            // 删除状态
//            builder.Property(nameof(IHasDeletionTime.IsDeleted))
//                    .IsRequired()
//                    .HasColumnName(columnPrefix + "IsDeleted")
//                    .HasColumnType("bit")
//                    .HasComment("删除状态");

//            builder.Property(nameof(IHasDeletionTime.DeletionTime))
//                    .HasColumnName(columnPrefix + "DeletionTime")
//                    .HasColumnType("datetime")
//                    .HasComment("删除时间");

//            //删除人
//            builder.Property(nameof(EduBaseAggregates<TKey>.DeleterId))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.DeleterId))
//                .HasColumnType("varchar(36)")
//                .HasComment("删除人标识");
//        }



//        /// <summary>
//        /// 审计字段扩展
//        /// </summary>
//        /// <typeparam name="T"></typeparam>
//        /// <typeparam name="TKey"></typeparam>
//        /// <typeparam name="TUser"></typeparam>
//        /// <param name="builder"></param>
//        /// <param name="columnPrefix"></param>
//        public static void AuditEntityMapping<T, TKey>(this EntityTypeBuilder<T> builder, string columnPrefix) where T : EduEntity
//        {
//            //主键标识
//            builder.HasKey(c => c.Id);
//            builder.Property(c => c.Id).HasColumnName($"{columnPrefix}Id").HasColumnType(typeof(TKey).Name.ToLowerInvariant() == "int64" ? "bigint" : "varchar(36)").ValueGeneratedNever();

//            #region 审计

//            builder.Property<DateTime>(nameof(EduBaseAggregates<TKey>.CreationTime))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.CreationTime))
//                .HasColumnType("datetime")
//                .HasComment("创建日期");

//            builder.Property<DateTime?>(nameof(EduBaseAggregates<TKey>.LastModificationTime))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.LastModificationTime))
//                .HasColumnType("datetime")
//                .HasComment("修改日期");

//            builder.Property(nameof(EduBaseAggregates<TKey>.CreatorId))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.CreatorId))
//                .HasColumnType("varchar(36)")
//                .HasComment("创建人标识");

//            builder.Property(nameof(EduBaseAggregates<TKey>.LastModifierId))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.LastModifierId))
//                .HasColumnType("varchar(36)")
//                .HasComment("修改人标识");
//            #endregion


//            builder.Property(nameof(IHasDeletionTime.IsDeleted))
//                    .IsRequired()
//                    .HasColumnName(columnPrefix + "IsDeleted")
//                    .HasColumnType("bit")
//                    .HasComment("删除状态");

//            builder.Property(nameof(IHasDeletionTime.DeletionTime))
//                    .HasColumnName(columnPrefix + "DeletionTime")
//                    .HasColumnType("datetime")
//                    .HasComment("删除时间");

//            builder.Property(nameof(EduBaseAggregates<TKey>.DeleterId))
//                .HasColumnName(columnPrefix + nameof(EduBaseAggregates<TKey>.DeleterId))
//                .HasColumnType("varchar(36)")
//                .HasComment("删除人标识");
//        }
//    }
//}
